import polars as pl

def get_all_table_columns(conn, table_name: str, schema: str = None) -> pl.DataFrame:
    """
    获取指定表的所有列信息
    
    参数:
        conn: 数据库连接对象，需提供fetch_all方法执行SQL并返回结果
        
    返回:
        pl.DataFrame: 包含列信息的DataFrame，列名包括COLUMN_NAME、DATA_TYPE等
    """
    # 根据不同数据库类型构建SQL查询
    # 这里以Oracle/达梦数据库为例，可根据需要修改
    sql = f"""
        SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, 
               DATA_SCALE, NULLABLE, COLUMN_ID
        FROM USER_TAB_COLUMNS
        ORDER BY TABLE_NAME, COLUMN_ID
        """
            
    try:
        # 执行SQL查询
        result = conn.fetch_all(sql)
        
        # 将结果转换为polars DataFrame
        if not result:
            return pl.DataFrame()
        
        # 假设result是包含元组的列表，每个元组代表一行数据
        # 获取列名（假设conn.fetch_all返回的结果包含列名信息）
        # 如果fetch_all只返回数据而不包含列名，需要手动指定列名
        columns = ['COLUMN_NAME', 'DATA_TYPE', 'DATA_LENGTH', 'DATA_PRECISION', 
                   'DATA_SCALE', 'NULLABLE', 'COLUMN_ID']
        
        return pl.DataFrame(result, columns=columns)
        
    except Exception as e:
        print(f"获取表 {table_name} 列信息失败: {e}")
        raise

# 使用示例
if __name__ == "__main__":
    # 假设conn是一个已经连接到数据库的对象，且提供了fetch_all方法
    # conn = DatabaseConnection()
    
    # 获取表的列信息
    # columns_df = get_table_columns(conn, "YOUR_TABLE_NAME", "YOUR_SCHEMA")
    
    # 打印结果
    # print(columns_df)
    pass